package cn.test;

import javafx.scene.control.Cell;

import javax.swing.*;
import javax.swing.JFrame;

/**
 * @ClassName CellMachine
 * @Description TODO
 * @Author 郑万富
 * @Date 2020/11/9 10:37
 * @Version 1.0
 */

/**
 * 看到这个题目的第一反应是将整个生命环境看作一个矩阵，其中的每一个细胞以二维坐标的形式存在于环境中，
 * 那么这个细胞类就有三个属性在生命游戏中的：x坐标，y坐标，生命状态。
 * 但是，这样做了以后发现两个问题：
 *  环境边界处的细胞生命状态判断实现很难。
 *  细胞之间的生命状态无法实现关联关系。
 *  之后是将单个细胞单独做一个（Cell类—相当于单元细胞类），以3*3九宫格的方式判断我们抽象出来的单元细胞的生命状态，
 *  再将其放入细胞自动机类（CellMachine类—主方法类）中演变，
 *  当然，还是写一个细胞信息类（Field类—相当于后台细胞数据库）
 *  将从Cell类中判断得来的细胞生命状态和在CellMachine类中的坐标两个信息存储起来，
 *  最后写一个可视化的View类（相当于表示层）来显示Cell和Field。
 */
/*
public class CellMachine {
    public static void main(String[] args) {
        Field field = new Field(30, 30);
        //往格子里放细胞
        for (int row = 0; row < field.getHeight(); row++) {
            for (int col = 0; col < field.getWidth(); col++) {
               // -------------------------; //填空1
            }
        }
        //初始化确定最开始活细胞的数量
        for (int row = 0; row < field.getHeight(); row++) {
            for (int col = 0; col < field.getWidth(); col++) {
                // Cell cell = --------------; //填空2
                Cell cell = new Cell();
                if (Math.random() < 0.2) {
                    cell.reborn();
                }
            }
        }
        View view = new View(field);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);//让frame不能最大化，最小化
        frame.setTitle("Cells");
        frame.add(view);
        //frame.setSize(480,480);
        frame.pack();//根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小。
        //pack根据panel的大小，来确定自身的大小！
        frame.setVisible(true);
        for (int i = 0; i < 100; i++) {   // 设置细胞分裂次数
            for (int row = 0; row < field.getHeight(); row++) {
                for (int col = 0; col < field.getWidth(); col++) {
                    Cell cell = field.getCell(row, col);
                    //填空3 （获取邻居细胞，并保存给邻居细胞数组对象）
                    ---------------------------------------------;
                    int numOfLive = 0;  // 设置活邻居细胞初始化个数
                 //   Cell[] neighbourCells;
                    Cell[] neighbourCells;
                    for (Cell c : neighbourCells) {
                        if (c.isAlive()) {
                            //------------;  //填空4 （遍历判断活邻居细胞的个数）
                        }
                    }
                    System.out.print("[" + row + "][" + col + "]:");
                    System.out.print(cell.isAlive() ? "live" : "dead");
                    System.out.print(":" + numOfLive + "-->");

                }

                // 判断当前细胞的下一步状态的核心代码
                Cell cell = new Cell();
                if (cell.isAlive()) {
                    if (-------) {  //填空5
                        cell.die();
                        System.out.print("die");
                    }
                } else if (--------) { //填空6
                    cell.reborn();
                    System.out.print("reborn");
                }
                System.out.println();
            }
        }
        System.out.println("UPDATE");
        frame.repaint();//调用view的paint方法……
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
*/


